웹개발 및 최신 테크 소식을 전하는 블로그, 웹이즈프리

HOME > php

[PHP] 난수생성 rand(), mt_rand()

Last Modified : 2017-12-22 / Created : 2015-04-06
44,220
View Count

난수 발생기를 만들어보려 합니다. 난수는 무작위 수... 즉 의미가 없는 숫자를 연속하여 만들어내는 것을 말합니다. 만약 난수를 만들려면 어떻게 해야할까요? 우리는 php 언어에서 난수를 만드는 방법을 알아보려합니다.



# PHP 난수를 발생시키는 방법

일단 임의의 수를 랜덤으로 생성하기 위해서 php의 함수를 사용해야합니다. php는 난수를 발생시키는 함수를 제공하며 두 가지의 함수가 존재합니다. 이는 다음과 같습니다.

rand()
mt_rand()


위에 보이시는 두개의 함수가 바로 php에는 난수 제공에 사용되는 rand() 그리고 mt_rand() 함수입니다. 이 함수를 사용하면 매우 간단하게 원하는 범위의 난수를 쉽게 생성할 수가 있죠. 아래는 사용방법입니다. (난수 발생시 어디서부터 어디까지... 즉 범위를 발생시킬 것인지도 중요하겠습니다.)

! php 임의의 수, 난수 발생하기 위한 방법 예제보기

아래예제는 변수에 난수값을 저장하는 간단한 방법입니다.
$randomNum = mt_rand(최소값, 최대값)

위 코드처럼 rand() 또는 mt_rand() 함수를 사용하여 난수를 만들 수 있으며 옵션으로 인자에 원하는 범위의 최대값과 최소값을 넣어주면 됩니다. 참고로 위는 mt_rand()을 사용했습니다. 여기서 이 둘의 차이점은 무엇일까요? mt_rand()rand()과 동일하게 난수를 발생시킵니다. 하지만 난수 발생의 차이가 있으며 이는 더 좋은 방법, 향상된 방법을 사용한다고 합니다. 예를들어 암호화, 해시를 만드는 방법의 SHA-12, SHA-256처럼 여러가지가 존재하는 것과 같은 이유라고 볼 수 있죠... 그럼 아래를 통해 더 실전적인 예제를 알아보겠습니다.


# php 난수 발생 실전 예제보기

만약 1부터 10까지 임의의 수를 반환하는 난수 제조기를 만들어보려고 합니다. 매우 간단한 코드입니다.
<php
   $randomNum = mt_rand(1, 10);
   // 변수에 난수를 발생시키는 함수를 사용하여 반환값을 저장함

   echo $randomNum;
   // 저장된 변수의 값을 출력함
?>

이와 같이 실행할 경우 아래와 같이 값이 나올 것입니다.
3
// 실행 결과 3을 반환하였음

위 결과는 3입니다. 하지만 3이 아니라 1부터 10까지의 어떤 값이든 숫자 타입의 값이 반환될 것입니다. 매우 간단한 방법으로 원하는 난수를 생성할 수 있었습니다. 그렇다면 다른 예제를 아래에서 확인해보세요.


! 또 다른 예제, 1부터 10000까지의 난수 발생시키기 이번에는 범위를 조금 넓여 난수를 만들어보려합니다. 아래는 난수의 범위가 1부터 10,000까지 이므로 매우 넓은 폭의 난수를 만들 것입니다. 그럼 코드를 보세요.

<?php
   $randomNum = mt_rand(1, 10000);
   // 변수에 함수를 통해 생성된 난수를 저장함
   
   echo $randomNum;
   // 변수에 저장된 값인 1 부터 10,000사이의 난수를 출력함
?>

이를 실행할 경우의 결과는 아래와 같습니다.
 9999
// 결과로 난수값 9999를 출력하였음

결과는 9999이나 1부터 10000까지 어떠한 값이든 난수로 만들 수 있습니다.

! 난수 발생이 왜 중요할까요?

난수 발생의 함수가 여러개인 이유는 그 만큼 난수 발생이 중요하고 필요하다는 점입니다. 예를들어 간단한 방법을 통해 프로그래밍된 난수를 생각해보겠습니다. 난수라고하나 우리는 그것이 어떤 알고리즘... 로직을 통해 만들어졌다는 것을 알 수 있고 난수를 만드는 방법을 거꾸로 올라가면 결국 이를 예측 가능한 프로그램 역시 만들 수 있기 때문입니다.

결국 난수가 진정한 난수가 되기 위해서는 매우 복잡한 과정을 거친 난수... 그 값을 예측할 수 없는 난수를 만들어야합니다.


# 난수 발생은 언제 필요할까요?여러가지가 필요하겠으나 가위바위보 처럼 컴퓨터가 의도하지 않은 결과를 반환하게 만들기 위해 필요할 수 있습니다. 또한 파일을 저장할때... 중복된 파일이 생성되지 않도록 하기 위해서는 무의미한 접두어가 필요할 수 있습니다. 이 경우 난수를 사용하면 매우 간단하게 서로 다른 파일이름을 만들 수 있습니다. 이는 CMS같은 시스템을 사용하는 경우 많이 볼 수 있을 것입니다. 만약 이미지를 만들어 서버에 저장하는 경우 같은 이름으로 저장되는 것을 방지하기 위해서 난수를  앞에 prefix로 붙이는 방법도 많이 사용되는 예입니다.

Previous

[PHP] 쿠키 설정하기, setcookie()

Previous

[PHP] 행 개수 구하기, mysqli_num_rows()